import sys
from typing import Optional

# 导入配置和日志模块
from .settings import settings
from utils.logger import get_logger

# 初始化日志记录器
logger = get_logger('llm')

from llama_index.llms.deepseek import DeepSeek
from llama_index.llms.openai import OpenAI

# 默认模型配置
DEFAULT_TEMPERATURE = 0.6

# 定义大模型接口
def deepseek_llm():
    """初始化 DeepSeek 大模型"""
    if not settings.DEEPSEEK_API_KEY:
        logger.warning("使用 DeepSeek 模型需要设置 DEEPSEEK_API_KEY 环境变量")
        return fallback_llm()
        
    logger.info("初始化 DeepSeek 大模型")
    return DeepSeek(
        api_key=settings.DEEPSEEK_API_KEY,
        model="deepseek-chat",
        api_base="https://api.deepseek.com",
        temperature=DEFAULT_TEMPERATURE
    )

def openAi_llm(**kwargs):
    """初始化 OpenAI 大模型"""
    if not settings.OPENAI_API_KEY:
        logger.warning("使用 OpenAI 模型需要设置 OPENAI_API_KEY 环境变量")
        return fallback_llm()
    
    logger.info("初始化 OpenAI 大模型")
    return OpenAI(
        api_key=settings.OPENAI_API_KEY,
        model="gpt-4o",
        api_base="https://api.openai.com",
        temperature=DEFAULT_TEMPERATURE,
        **kwargs
    )

def qwen_llm(model="qwen-max", **kwargs):
    """初始化千问大模型"""
    if not settings.QWEN_API_KEY:
        logger.warning("使用千问模型需要设置 QWEN_API_KEY 环境变量")
        return fallback_llm()
    
    logger.info("初始化千问大模型")
    return OpenAI(
        api_key=settings.QWEN_API_KEY,
        model=model,
        api_base="https://dashscope.aliyuncs.com/api/v1",
        temperature=DEFAULT_TEMPERATURE,
        **kwargs
    )

def fallback_llm():
    """当所有模型都无法使用时的回退处理"""
    logger.error("无法初始化任何LLM模型，请检查环境变量配置")
    logger.error("程序将退出")
    sys.exit(1)